// 367. 有效的完全平方数
// 给你一个正整数 num 。如果 num 是一个完全平方数，则返回 true ，否则返回 false 。
// 完全平方数 是一个可以写成某个整数的平方的整数。换句话说，它可以写成某个整数和自身的乘积。
// 不能使用任何内置的库函数，如  sqrt 。

#include <stdio.h>
#include <stdbool.h>

bool isPerfectSquare(int num) {
    if(num == 1)
    return true;
    int l = 1;
    int r = num / 2;
    while(l <= r)
    {
        int mid = (l + r) / 2;
        if(num % mid == 0 && mid == num / mid)
        {
            return true;
        }
        else if(mid < num / mid)
        {
            l = mid + 1;
        }
        else
        {
            r = mid - 1;
        }
    }
    return false;
}

int main()
{
    int num = 0;
    printf("请输入一个正整数:");
    scanf("%d",&num);
    if(isPerfectSquare(num) == true)
        printf("%d是完全平方数\n",num);
    else printf("%d不是完全平方数\n",num);
    return 0;
}